package com.parfinex.sims.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 描述：
 * DruidUtils是创建数据库连接池的工具
 * 主要解决了连接数据库时每次都要打开一个线程占用时间的问题的性能问题
 *
 * @author lijh
 * @date 2021-11-13 23:42
 * @version v1.0.0
 */

public class DruidUtils<statement> {
    /**1.定义成员变量*/
    public static DataSource dataSource;
    //2.静态代码块
    static {

        try {
            //2.1.创建属性集对象
            Properties properties = new Properties();
            //2.2.加载配置文件，Druid连接池不能够主动加载配置文件，需要指定文件
            InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            //2.3.使用Properties对象的load方法从字节流中读取配置信息
            properties.load(inputStream);
            //2.4.通过工厂类获取连接池对象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**3.获取连接的方法*/
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
    /**4.获取Druid连接池对象的方法*/
    public static DataSource getDataSource() { return dataSource;}

    /**5.释放资源*/
    public static void close(Connection con, Statement statement, ResultSet resultSet){
        if(con != null && statement != null && resultSet != null){

            try {
                resultSet.close();
                statement.close();
                //归还连接
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
